在 Docker 中部署 .NET Core 网站

您所在的位置:网站首页 docker 网页 在 Docker 中部署 .NET Core 网站

在 Docker 中部署 .NET Core 网站

2022-03-26 06:48| 来源: 网络整理| 查看: 265

在 Docker 中部署网站和服务,已经是当前比较流行的运维技术,也是未来不可逆转的大趋势。作为一名 .net 开发人员,掌握 Docker 部署 .NET 网站和服务,已经是必备的技能,刻不容缓。本篇文章基于 .NET5 开发的网站,以非常简单易懂的方式,快速介绍部署方式,目的在于让大家能够快速入门,增加学习兴趣和信心。

1、安装 Docker

这里以最常见的服务器操作系统 CentOS 为例,要想安装 Docker ,必须确保 CentOS 的版本在 7 以上,这里使用 CentOS7 安装 Docker,官网地址为:https://docs.docker.com/engine/install/centos

由于 Docker 版本更新比较快,官网文档有可能没来得及更新,按照官网的介绍进行安装,很有可能会出现问题。由于篇幅有限,这里就不介绍 CentOS7 的安装过程了,也不介绍 Docker 安装过程中所遇到的问题了,直接列出能够成功安装的步骤,以节省大家的时间。

官网上安装 Docker 使用的是国外的 yum 源,在国内访问时网速可能会比较慢,因此我推荐使用国内的 yum 源,比如阿里的 yum 源。下面我以 root 账号登录 CentOS7 系统,运行命令前就不加 sudo 了。

# 1 首先安装工具包 yum install yum-utils -y # 2 然后使用阿里的 yum 源 yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 3 升级一下 CentOS 系统 yum update -y # 4 生成 yum 源的缓存 yum makecache fast # 5 在 CentOS 服务器上,安装最新的 Docker 服务端和客户端 yum install docker-ce docker-ce-cli -y # 6 启动 Docker 服务 systemctl start docker # 7 设置开机自动自动 Dcoker 服务 systemctl enable docker # 8 查看 Docker 版本号,验证 Docker 是否安装成功 docker version 2、创建并发布.NET5 的网站

1 使用 VS2019 创建项目,选择 ASP.NET Core Web 应用(模型-视图-控制器),然后一直点击下一步,可以考虑取消 HTTPS 创建出如下图所示的代码结构:

在 Docker 中部署 .NET Core 网站_.net

2 在 appsettings.json 中增加两个配置节:

{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", //这个是我新增加的配置节:网站启动时的端口 "ListenPort": "http://*:9090", //这个是我新增加的配置节:用于显示在首页的文本 "DisplayText": "Hello Jobs" }

3 在 Models 文件夹下,创建一个类 CommonBLL.cs ,代码如下:

using Microsoft.Extensions.Configuration; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace CoreWebDemo.Models { public static class CommonBLL { //这个是我新增加的代码 //作用是在网站启动前加载 appsettings.json 配置文件 public static IConfiguration Config = (new ConfigurationBuilder()) .SetBasePath(Environment.CurrentDirectory) .AddJsonFile("appsettings.json", false, true).Build(); } }

备注:上面的 AddJsonFile 方法的第三个参数为 true ,表示如果修改了 appsettings.json 配置文件的话,会自动重新加载,更新上面的 Config 这个变量的内容。

4 修改 Views/Home 文件夹下的 Index.cshtml ,增加一行代码用于显示 appsettings.json 中配置节 DisplayText 中的文本到首页中,因为后面要演示网站和配置文件分离部署。(网站部署在 Docker 中,appsettings.json 文件放在 Docker 外面,修改外面的 appsettings.json 文件中的配置节,不用重启 Docker,首页刷新一下自动更新成 appsettings.json 修改后的配置节内容)

在 Docker 中部署 .NET Core 网站_json_02

5 修改 Program.cs 代码,使用 appsettings.json 中配置的端口,作为网站启动端口

public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults( webBuilder => { //我在这里增加了代码 UseUrls(要监听的网站地址端口), //格式类似为:UseUrls(Http://*:9090) webBuilder.UseUrls(CommonBLL.Config["ListenPort"]).UseStartup(); });

6 选择以控制台方式启动(默认使用的是 IIS Express 方式启动,端口是 5000)

在 Docker 中部署 .NET Core 网站_docker_03

在 Docker 中部署 .NET Core 网站_服务器_04

在 Docker 中部署 .NET Core 网站_.net_05

如果控制台方式启动正常,网站启动的端口也是 appsettings.json 中 ListenPort 对应的端口,通过 localhost:9090 访问能够打开页面,并且也把配置节 DisplayText 配置的内容显示出来,则表示以上代码写的没有问题。

7 采用框架依赖、可移植的方式发布网站程序

在 Docker 中部署 .NET Core 网站_docker_06

发布后的内容如下图所示:

在 Docker 中部署 .NET Core 网站_.net_07

到此为止,Docker 部署前的准备工作已经完毕。

3、生成 Docker 镜像

下面我们把已经发布的网站,生成 Docker 镜像,具体步骤如下:

1 使用 xftp 登录到 CentOS7 服务器,在根目录下创建一个文件夹 application ,然后在 application 文件夹中再创建一个 CoreWebDemo 文件夹。将之前发布的网站,复制到 CoreWebDemo 文件夹中,另外再把 appsetting.json 文件复制一份到 application 文件夹下。

备注:application 文件夹下的这个 appsettings.json 用于在 Docker 外部署,方便后续如果要是更改配置节时,不需要进入 Docker 中进行修改。

在 Docker 中部署 .NET Core 网站_.net_08

2 在本机 windows 电脑上新建一个文本文件 df.txt ,编写生成镜像的指令,也就是大家常说的 Dockerfile

# 表示以 .NET5 的 SDK 作为基础镜像 FROM mcr.microsoft.com/dotnet/sdk:5.0 # 进入 Docker 时直接就进入到了 /app 这个目录 WORKDIR /app # 将当前目录下的所有文件,复制到 docker 的 /app 目录下 COPY . /app # 启动网站服务 ENTRYPOINT ["dotnet","CoreWebDemo.dll"]

注意:每行开头的指令,必须是大写字母。

3 将编写好的 df.txt 文件,通过 xftp 复制到 /application/CoreWebDemo 目录下

在 Docker 中部署 .NET Core 网站_centos_09

4 使用 xshell 登录到 CentOS7 服务器上,运行以下命令:

# 进入到 CentOS7 上网站的目录 cd /application/CoreWebDemo # 生成 .NET5 网站的 Docker 镜像文件 docker build -t mydemo -f df.txt .

在 Docker 中部署 .NET Core 网站_json_10

docker build 的参数:

-t 表示生成的镜像的 tag 名称(如果包含字母,只能使用小写字母)

-f 表示要使用的 Dockerfile 文件名称

后面一定要跟上一个点(.)

5 运行 docker images 就可以看到所生成的镜像

在 Docker 中部署 .NET Core 网站_docker_11

4、Docker 部署 .NET5 网站

1 使用以下命令,运行刚才生成的 .NET5 镜像

docker run --name mycoredemo -d -p 9999:9090 -v /application/appsettings.json:/app/appsettings.json mydemo

以上命令参数的含义:

--name 指定运行后的服务名称

-d 表示后台运行,不阻塞前台线程,这样命令行窗口仍然可以使用

-p 进行端口映射,网站启动后的端口是 9090(之前配置的),我想让服务器使用 9999 端口访问

-v 表示卷映射,可以把 docker 外面的文件夹或文件,映射到 docker 内部的文件夹或文件,这里将外面的 appsettings.json 配置文件,映射到 docker 网站部署的文件夹中的 appsettings.json 配置文件,从而实现在 docker 外部修改配置就可以使用 docker 内部的网站配置生效

2 运行以下命令开通防火墙 9999 端口

# 在防火墙中开通 9999 端口 firewall-cmd --zone=public --add-port=9999/tcp --permanent # 重启加载防火墙配置 firewall-cmd --reload

3 如果 CentOS7 启动了 SeLinux 的话,请关闭 SeLinux

SeLinux 的配置文件在 /etc/selinux 目录下,配置文件的名称是 config,

打开它进行编辑,将 SELINUX 后面的值修改为 disabled

在 Docker 中部署 .NET Core 网站_docker_12

然后使用 xshell 运行命令 init 6 重新启动 Linux 服务器。(SeLinux 配置修改,必须重启才能生效)

到此为止 .NET5 网站在 Docker 中部署完毕,下面就访问验证一下吧。

5、浏览器访问验证部署成果

我的 CentOS7 服务器的 ip 地址是:192.168.44.5

我自己的电脑的 ip 地址是 192.168.44.88

两个 ip 在同一个网段中,因此可以直接通过 ip 地址进行访问。我们刚才通过 CentOS7 服务器的 9999 端口映射到 Docker 内网站的 9090 端口,因此可以通过 http://192.168.44.5:9999 访问网站。

在 Docker 中部署 .NET Core 网站_.net_13

由于我们在运行 .NET5 网站镜像时,通过 -v 参数,

把 CentOS7 服务器上 /application/CoreWebDemo/appsettings.json 文件,

映射到了 docker 内部的 /app/appsettings.json 配置文件,

因此只需要修改 CentOS7 服务器上的 appsettings.json 文件,

就相当于修改了 Docker 中 .NET5 网站的配置文件。

我们通过 xftp 把 CentOS7 服务器上的 appsettings.json 中的配置节 DisplayText 的值修改为 Perfect Jobs,保存后,然后刷新一下网页,可以发现页面也显示为 Perfect Jobs

在 Docker 中部署 .NET Core 网站_docker_14



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3